﻿namespace Super
{
	/// <summary>
	/// 游戏事件的接口，所有事件数据类都要继承并实现这个接口
	/// </summary>
	public interface IGameEvent { }

	/// <summary>
	/// 初始化接口，游戏第一个场景加载完毕后调用,单例Manager初始化
	/// </summary>
	public interface IInit
	{
		public void OnInit();
	}

	/// <summary>
	/// 比较数据的优先级, 优先队列判断优先级
	/// A.Priority(B) true   A的优先级比B高
	/// </summary>
	/// <typeparam name="T"></typeparam>
	public interface IPriority<T>
	{
		public bool Priority(T A);
	}

	/// <summary>
	/// 用于list排序，用于结构的构建等等
	/// 编写尽量按照 A.CompareTo(B)
	/// A 为root或者oldData, B为node或者newData
	/// A > B  return  1	做出调整
	/// A == B return  0	不作处理
	/// A < B  'return -1	不作处理
	/// </summary>
	/// <typeparam name="T"></typeparam>
	public interface IComparable<T>
	{
		public int CompareTo(T A);
	}


	/// <summary>
	/// 多叉树接口，泛型多叉树需要实现的接口
	/// </summary>
	/// <typeparam name="T"></typeparam>
	public interface IMultiTreeValue<T> where T : IMultiTreeValue<T>
	{
		/// <summary>
		/// 获取数据存储在当前节点map中的key
		/// </summary>
		/// <param name="root"></param>
		/// <param name="value"></param>
		/// <returns></returns>
		public object GetMapKey(MultiTreeNode<T> root, T value);

		/// <summary>
		/// 更新当前节点
		/// </summary>
		/// <param name="root"></param>
		/// <param name="value"></param>
		public void UpdateNode(MultiTree<T> tree, MultiTreeNode<T> root, T value);

		/// <summary>
		/// 是否插入当前节点
		/// </summary>
		/// <param name="root"></param>
		/// <param name="value"></param>
		public bool CheckIfCurrentNode(MultiTreeNode<T> root, T value);
	}

	/// <summary>
	/// 多语言文本刷新接口
	/// </summary>
	public interface ILangRefresh
	{
		public void OnLangRefresh();
	}
}
